/**
 * 返回结果
 */
export default class ReturnResult {
    
    static CODE_SUCCESS = 1;
    static CODE_FAIL = -1;

    constructor(code, message, data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 成功
     * @param {string} message 提示信息
     * @param {any} data 数据
     * @returns 成功状态的实例对象
     */
    static success(message, data) {
        return new ReturnResult(ReturnResult.CODE_SUCCESS, message, data);
    }

    /**
     * 失败
     * @param {string} message 提示信息
     * @returns 失败状态的实例对象
     */
    static fail(message) {
        return new ReturnResult(ReturnResult.CODE_FAIL, message);
    }

    /**
     * 将普通对象转为ReturnResult对象，解决JSON序列化丢失方法的问题
     * @param {{ code: number, message: string, data: any }} result 
     * @returns {ReturnResult} ReturnResult对象
     */
    static from(result) {
        return new ReturnResult(result.code, result.message, result.data);
    }

    /**
     * 当前对象是否为成功状态
     */
    get isSuccess() {
        return this.code === ReturnResult.CODE_SUCCESS;
    }

    /**
     * 当前对象是否为失败状态
     */
    get isFail() {
        return this.code === ReturnResult.CODE_FAIL;
    }
}